﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MySql.Data.MySqlClient;
using System.Data;

namespace CapaNegocio
{
    /*
         * 
         *  ENCABEZADO DE BOLETA : TABLA BOLETA
            {codigo_Boleta: INT},
            {fecreacion_Boleta: DATETIME},
            {estado_Boleta: TINYINT},
            {total_Boleta: DECIMAL},
            {Paciente_codigo_paciente: INT},
            {Usuario_codigo_Usuario: TINYINT}
         * 
         *  DETALLE DE BOLETA : TABLA BOLETADETALLE
         * 
         *  {codigo_BoletaDetalle: TINYINT},
            {cantidad_BoletaDetalle: TINYINT},
            {estado_BoletaDetalle: TINYINT},
            {fecestado_BoletaDetalle: DATETIME},
            {Boleta_codigo_Boleta: INT},
            {Examen_codigo_Examen: TINYINT}
         * 
         *  RESPUESTA DE BOLETA : TABLA BOLETARESPUESTA
         *  
         *  {codigo_BoletaRespuesta: TINYINT},
            {resultado_BoletaRespuesta: VARCHAR},
            {descripcion_BoletaRespuesta: VARCHAR},
            {fecresultado_BoletaRespuesta: DATETIME},
            {BoletaDetalle_codigo_BoletaDetalle: TINYINT}
         * 
         */

    public class clsBoleta
    {
        
            //ENCABEZADO DE BOLETA : TABLA BOLETA
            
            public int codigo_Boleta                        {   get;    set;    }
            public String fecreacion_Boleta                 {   get;    set;    }
            public int estado_Boleta                        {   get;    set;    }
            public decimal total_Boleta                     {   get;    set;    }
            public int Paciente_codigo_paciente             {   get;    set;    }
            public int Usuario_codigo_Usuario               {   get;    set;    }


            //DETALLE DE BOLETA : TABLA BOLETADETALLE

            public int codigo_BoletaDetalle                 {   get;    set;    }
            public int cantidad_BoletaDetalle               {   get;    set;    }
            public int estado_BoletaDetalle                 {   get;    set;    }
            public int muestra_BoletaDetalle                {   get;    set;    }
            public String fecestado_BoletaDetalle           {   get;    set;    }
            public int Boleta_codigo_Boleta                 {   get;    set;    }
            public int Examen_codigo_Examen                 {   get;    set;    }
            public String resultado_BoletaDetalle           {   get;    set;    }
            public String descripcion_BoletaDetalle         {   get;    set;    }

                      
        


            /*
             *
             *  0 = No Atendido
                1 = Atendido   
             * 
             */

            
            //Actaulizar Respuesta de Boletas Detalle
            public bool mtdActualizarRespuestaDetalleBoleta()
            {
                clsConexion con = new clsConexion();
                //con.cadenaconexionx = this.cadena;
                MySqlCommand command;

                try
                {
                    con.mtdConectar();
                    command = con.conexion.CreateCommand();
                    command.CommandText = "CALL spActualizarResultadoExamenBoletaDetalle('" + this.resultado_BoletaDetalle + "','" + this.descripcion_BoletaDetalle + "',"+this.codigo_BoletaDetalle+")";
                    command.ExecuteNonQuery();

                    con.mtdDesconectar();

                    return true;
                }
                catch (Exception e)
                {
                    //return false;
                    throw e;
                }
            }

            //ACTUALIZAR TOTAL DE BOLETA
            public bool mtdActualizarTOTAL()
            {
                clsConexion con = new clsConexion();
                //con.cadenaconexionx = this.cadena;
                MySqlCommand command;

                try
                {
                    con.mtdConectar();
                    command = con.conexion.CreateCommand();
                    command.CommandText = "CALL spActualizarTotalBoleta(" + this.total_Boleta + "," + this.Boleta_codigo_Boleta + "," + this.Paciente_codigo_paciente + ")";
                    command.ExecuteNonQuery();

                    con.mtdDesconectar();

                    return true;
                }
                catch (Exception e)
                {
                    //return false;
                    throw e;
                }
            }

            //ACTUALIZAR MUESTRA DETALLE BOLETA
            public bool mtdActualizarMuestraDetalleBoleta()
            {
                clsConexion con = new clsConexion();
                //con.cadenaconexionx = this.cadena;
                MySqlCommand command;

                try
                {
                    con.mtdConectar();
                    command = con.conexion.CreateCommand();
                    command.CommandText = "CALL spActualizarMuestraDetalleBoleta(" + this.codigo_BoletaDetalle + "," + this.muestra_BoletaDetalle + ")";
                    command.ExecuteNonQuery();                    

                    con.mtdDesconectar();

                    return true;
                }
                catch (Exception e)
                {
                    //return false;
                    throw e;
                }
            }

            //ACTUALIZAR ESTADO DETALLE BOLETA
            public bool mtdActualizarEstadoDetalleBoleta()
            {
                clsConexion con = new clsConexion();
                //con.cadenaconexionx = this.cadena;
                MySqlCommand command;

                try
                {
                    con.mtdConectar();
                    command = con.conexion.CreateCommand();
                    command.CommandText = "CALL spActualizarEstadoDetalleBoleta(" + this.codigo_BoletaDetalle + "," + this.estado_BoletaDetalle + ")";
                    command.ExecuteNonQuery();

                    con.mtdDesconectar();

                    return true;
                }
                catch (Exception e)
                {
                    //return false;
                    throw e;
                }

            }

            public bool mtdActualizarEstadoBoleta()
            {

                //obtener codigo de boleta y actualizar solamente estado de boleta
                //el codigo de boleta se obtiene del DGV

                clsConexion con = new clsConexion();
                //con.cadenaconexionx = this.cadena;
                MySqlCommand command;

                try
                {
                    con.mtdConectar();
                    command = con.conexion.CreateCommand();
                    command.CommandText = "CALL spActualizarEstadoBoleta(" + this.estado_Boleta + "," + this.Boleta_codigo_Boleta + ")";
                    command.ExecuteNonQuery();

                    con.mtdDesconectar();

                    return true;
                }
                catch (Exception e)
                {
                    //return false;
                    throw e;
                }

                //return false;
            }

            public DataTable mtdListarDetalleBoletaPaciente()
            {
                clsConexion con = new clsConexion();
                //con.cadenaconexionx = this.cadena;
                MySqlCommand command = new MySqlCommand();
                DataTable ObjDatatable = new DataTable();
                MySqlDataAdapter ObjDataAdapter = new MySqlDataAdapter();

                try
                {

                    con.mtdConectar();
                    command = con.conexion.CreateCommand();
                    command.CommandText = "CALL spListarDetalleBoletaPaciente("+this.Boleta_codigo_Boleta+");";
                    command.ExecuteNonQuery();

                    ObjDataAdapter.SelectCommand = command;
                    ObjDataAdapter.Fill(ObjDatatable);

                    //con = null;


                    con.mtdDesconectar();
                    ObjDataAdapter = null;

                    return ObjDatatable;
                }
                catch (Exception)
                {
                    throw new Exception("System Error.");
                }
            }


            public bool mtdBuscarUltimaBoleta()
            {
                clsConexion con = new clsConexion();
                MySqlCommand command;
                MySqlDataReader Reader;
                try
                {
                    con.mtdConectar();
                    command = con.conexion.CreateCommand();

                    command.CommandText = "select * from boleta where paciente_codigo_paciente = " +this.Paciente_codigo_paciente+ " ORDER BY codigo_boleta DESC LIMIT 0, 1";
                    Reader = command.ExecuteReader();
                    while (Reader.Read())
                    {
                        this.codigo_Boleta = Reader.GetInt16(0);                      

                        return true;
                    }

                    con.mtdDesconectar();
                    return false;
                }
                catch (Exception ex)
                {
                    //return false;
                    throw ex;
                }
            }

            public bool mtdAñadirDetalleBoleta()
            {

                clsConexion con = new clsConexion();                
                MySqlCommand command;
                

                try
                {
                    con.mtdConectar();
                    command = con.conexion.CreateCommand();
                    command.CommandText = "call spAñadirDetalleBoleta("+this.cantidad_BoletaDetalle+","+this.estado_BoletaDetalle+",NOW(),"+this.Boleta_codigo_Boleta+","+this.Examen_codigo_Examen+")";
                    command.ExecuteNonQuery();

                    con.mtdDesconectar();
                    return true;
                }
                catch(Exception ex)
                {
                    
                    //return false;
                    throw ex;
                }

            }

            public bool mtdCrearBoleta()
            {
                clsConexion con = new clsConexion();
                //con.cadenaconexionx = this.cadena;
                MySqlCommand command;
                MySqlDataReader Reader;

                try
                {
                    
                    //MySqlDataReader Reader;

                    con.mtdConectar();
                    command = con.conexion.CreateCommand();
                    command.CommandText = "Call spCrearBoleta(NOW()," + this.estado_Boleta + ",0.0," + this.Paciente_codigo_paciente + "," + this.Usuario_codigo_Usuario + ");";
                    command.ExecuteNonQuery();

                    //en una consulta obtenemos la boleta creada mas recientemente
                    //command.CommandText = "SELECT * FROM `ilab6`.`boleta` WHERE paciente_codigo_paciente = " + this.Paciente_codigo_paciente + " ORDER BY fecreacion_boleta DESC LIMIT 0,1;";
                    //Reader = command.ExecuteReader();

                    //while (Reader.Read())
                    //{

                    //    //solo tomamos el codigo de la boleta
                    //    this.codigo_Boleta = Reader.GetInt16(0);                        
                    //}

                    con.mtdDesconectar();


                    return true;
                }
                catch (Exception ex)
                {
                    //System.Windows.Forms.MessageBox.Show("No se Pudo Crear Boleta");                   
                    //System.Windows.Forms.MessageBox.Show(ex.Source);
                    //return false;
                    throw ex;
                    
                }
            }
           
            public DataTable ListarBoletas() 
            {
                clsConexion con = new clsConexion();
                //con.cadenaconexionx = this.cadena;
                MySqlCommand command = new MySqlCommand();
                DataTable ObjDatatable = new DataTable();
                MySqlDataAdapter ObjDataAdapter = new MySqlDataAdapter();

                try
                {

                    con.mtdConectar();
                    command = con.conexion.CreateCommand();
                    command.CommandText = "CALL spListarBoletasPaciente("+this.Paciente_codigo_paciente+");"; //se modifico nombre de storeprocedure y el ORDER BY en el SP
                    command.ExecuteNonQuery();

                    ObjDataAdapter.SelectCommand = command;
                    ObjDataAdapter.Fill(ObjDatatable);

                    //con = null;


                    con.mtdDesconectar();
                    ObjDataAdapter = null;

                    return ObjDatatable;
                }
                catch (Exception)
                {
                    throw new Exception("System Error.");
                }                
            }
    }
}
